﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSys;
using System.Data.SqlClient;
using System.Data;

namespace DAL_MechSys
{
    public class DALAgendamento : DALBase
    {

        private DTOAgendamento CriarAgendamento(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOAgendamento dtoAgendamento = new DTOAgendamento();

                if (!string.IsNullOrEmpty(sqlDataReader["AgendamentoID"].ToString()))
                {
                    dtoAgendamento.AgendamentoID = (int)sqlDataReader["AgendamentoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["ClienteID"].ToString()))
                {
                    dtoAgendamento.ClienteID = (int)sqlDataReader["ClienteID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["VeiculoID"].ToString()))
                {
                    dtoAgendamento.VeiculoID = (int)sqlDataReader["VeiculoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataAgendada"].ToString()))
                {
                    dtoAgendamento.DataAgendada = (DateTime)sqlDataReader["DataAgendada"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Turno"].ToString()))
                {
                    dtoAgendamento.Turno = (byte)sqlDataReader["Turno"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Resumo"].ToString()))
                {
                    dtoAgendamento.Resumo = (string)sqlDataReader["Resumo"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Descricao"].ToString()))
                {
                    dtoAgendamento.Descricao = (string)sqlDataReader["Descricao"];
                }

                return dtoAgendamento;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Inserir(DTOAgendamento dtoAgendamento)
        {

            try
            {
                string storedProssidere = "sp_InserirAgendamento";
                SqlParameter[] parameters =
                
                {                    
                   new SqlParameter("@clienteID", dtoAgendamento.ClienteID),
                   new SqlParameter("@veiculoID", dtoAgendamento.VeiculoID),
                   new SqlParameter("@dataAgendada", dtoAgendamento.DataAgendada),
                   new SqlParameter("@turno", dtoAgendamento.Turno),
                   new SqlParameter("@resumo", dtoAgendamento.Resumo),                       
                   new SqlParameter("@descricao", dtoAgendamento.Descricao),
                   new SqlParameter("@dataRegistro", DateTime.Now),
                   new SqlParameter("@status", dtoAgendamento.Status)

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Atualizar(DTOAgendamento dtoAgendamento)
        {
            try
            {
                string storedProssidere = "sp_AtualizarAgendamento";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@agendamentoID", dtoAgendamento.AgendamentoID),
                           new SqlParameter("@clienteID", dtoAgendamento.ClienteID),
                           new SqlParameter("@veiculoID", dtoAgendamento.VeiculoID),
                           new SqlParameter("@dataAgendada", dtoAgendamento.DataAgendada),
                           new SqlParameter("@turno", dtoAgendamento.Turno),
                           new SqlParameter("@resumo", dtoAgendamento.Resumo),                       
                           new SqlParameter("@descricao", dtoAgendamento.Descricao),
                           new SqlParameter("@dataRegistro", DateTime.Now),
                           new SqlParameter("@status", dtoAgendamento.Status)                  
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void AtualizarStatus(int agendamentoID, int novoStatus)
        {
            try
            {
                string storedProssidere = "sp_AtualizarAgendamentoStatus";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@agendamentoID", agendamentoID),
                           new SqlParameter("@statusatual", novoStatus)                                         
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
 
        }

        public void Excluir(int agendamentoID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirAgendamento";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@agendamentoID", agendamentoID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {                
                throw;
            }
        }

        public DataTable BuscarAgendamentosPorData(DateTime data, byte turno)
        {
            DataTable dataTable = new DataTable();

            try
            {
                string storedProssidere = "sp_BuscarAgendamentoPorData";

                SqlParameter[] parameters =
            {
                new SqlParameter("@data", data),
                new SqlParameter("@turno", turno)
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    //a.AgendamentoID, c.Nome, c.Sobrenome, v.Marca, v.Modelo, v.Placa, Resumo, Descricao, StatusAtual
                    dataTable.Load(sqlDataReader);
                    sqlDataReader.Close();
                }

                return dataTable;

            }
            catch (Exception)
            {
                throw;
            }
        }

        public DataTable BuscarAgendamentosPorDataeStatus(DateTime data, byte turno, int status, int status2, int status3, int status4)
        {
            DataTable dataTable = new DataTable();

            try
            {
                string storedProssidere = "sp_BuscarAgendamentoPorDataeStatus";

                SqlParameter[] parameters =
            {
                new SqlParameter("@data", data),
                new SqlParameter("@turno", turno),
                new SqlParameter("@status", status),
                new SqlParameter("@status2", status2),
                new SqlParameter("@status3", status3),
                new SqlParameter("@status4", status4)
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    //a.AgendamentoID, c.Nome, c.Sobrenome, v.Marca, v.Modelo, v.Placa, Resumo, Descricao, StatusAtual
                    dataTable.Load(sqlDataReader);
                    sqlDataReader.Close();
                }

                return dataTable;

            }
            catch (Exception)
            {
                throw;
            }
        }

        public DataTable BuscarAgendamentosPorDataeStatusPesquisa(DateTime data, byte turno, int status, int status2, int status3, int status4, string texto)
        {
            DataTable dataTable = new DataTable();

            try
            {
                string storedProssidere = "sp_BuscarAgendamentoPorDataeStatusPesquisa";

                SqlParameter[] parameters =
            {
                new SqlParameter("@data", data),
                new SqlParameter("@turno", turno),
                new SqlParameter("@status", status),
                new SqlParameter("@status2", status2),
                new SqlParameter("@status3", status3),
                new SqlParameter("@status4", status4),
                new SqlParameter("@string", texto)
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    //a.AgendamentoID, c.Nome, c.Sobrenome, v.Marca, v.Modelo, v.Placa, Resumo, Descricao, StatusAtual
                    dataTable.Load(sqlDataReader);
                    sqlDataReader.Close();
                }

                return dataTable;

            }
            catch (Exception)
            {
                throw;
            }
        }

        public bool VerificaAgendamentoRealizado(DateTime data, byte turno, int clienteID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaRegistroRealizado";

                SqlParameter[] parameters =
            {
                new SqlParameter("@dataAgendada", data),
                new SqlParameter("@turno", turno),
                new SqlParameter("@clienteID", clienteID)               
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }

        public bool VerificaSeAgendamentoIDExiste(int agendamentoID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaSeAgedamentoIDExiste";

                SqlParameter[] parameters =
            {
                new SqlParameter("@agendamentoID", agendamentoID),                            
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }           
    }
}
